// 思路
// 遍历路由数据通过router.addRoute一个个的添加，同时将路由数据缓存起来
// 当页面刷新时，从缓存里拿出路由数据再重新添加，同时配合路由守卫来跳页面

import router from "./index";
import { useStore } from "../stores/index";

router.beforeEach((to, from, next) => {
  // console.log("进入新路由---", to);

  const store = useStore();
  const token = store.token;
  const roleList = store.roleList;

  if (token) {
    if (!store.asyncRoutestMark) {
      new AddDynamicList(roleList);

      // router.getRoutes();
      console.log(router.getRoutes(), "查看现有路由");
      store.setAsyncRoutestMark(true); // 添加路由后更改标识为true
      next({ ...to, replace: true }); //路由进行重定向放行
    } else {
      next();
    }
    // if (to.matched.length > 0 || from.path !== "/") {
    //   // 判断是否有该路径
    //   next();
    // } else {
    //   // 防止页面刷新
    //   // 当页面刷新后，即使动态路由添加上去了，也能通过getRoutes拿到，但是刷新页面时的跳转会有问题，提示你该路由不存在之类的，这时要在路由守卫里通过router.push来跳转
    //   if (from.path === "/" && to.matched.length <= 0) {
    //     next(to.path);
    //   } else {
    //     next("/notfound");
    //   }
    // }
  } else {
    if (to.path === "/login") {
      next();
    } else {
      next("/login");
    }
  }
});

export class AddDynamicList {
  private routes: Array<any>;
  constructor(options: Array<any>) {
    this.routes = options;
    this.init();
  }
  init() {
    this.addDynamicRoute(this.routes);
  }
  // 动态添加路由
  addDynamicRoute(routes: Array<any>) {
    const modules = import.meta.glob("../views/**/*.vue"); // 获取所有加载的vue组件

    for (let i = 0; i < routes.length; i++) {
      if (routes[i].redirect) {
        const url = `../views/${routes[i].component}.vue`;
        router.addRoute({
          path: routes[i].path,
          redirect: "/notfound",
          // import.meta.glob
          // component: modules[url], // 组件所在路径为 key
          // meta: routes[i].meta,
        });
      } else if (routes[i].component) {
        const url = `../views/${routes[i].component}.vue`;
        router.addRoute("layout", {
          path: routes[i].path,
          // import.meta.glob
          component: modules[url], // 组件所在路径为 key
          meta: routes[i].meta,
        });
      }
      if (routes[i].children && routes[i].children.length > 0) {
        this.addDynamicRoute(routes[i].children);
      }
    }
  }
  // static removeDynamicRoute(routes: Array<any>) {
  //   for (let i = 0; i < routes.length; i++) {
  //     if (routes[i].name) {
  //       router.removeRoute(routes[i].name);
  //     }

  //     if (routes[i].children && routes[i].children.length > 0) {
  //       this.removeDynamicRoute(routes[i].children);
  //     }
  //   }
  // }
  // 过滤路由，将 component 字段的字符串路由名转为 vue 组件
  // filterRouteList() {
  //
  // }
}
